/**
  ******************************************************************************
  * @author  泽耀科技 ASHINING
  * @version V3.0
  * @date    2016-10-08
  * @brief   主函数C文件
  ******************************************************************************
  * @attention
  *
  * 官网	:	http://www.ashining.com
  * 淘宝	:	https://shop105912646.taobao.com
  * 阿里巴巴:	https://cdzeyao.1688.com
  ******************************************************************************
  */

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<termios.h>
#include<errno.h>
#include<string.h>
#include<time.h>
#include<linux/serial.h>
#include<sys/ioctl.h>
#include <pthread.h>

#include "spi.h"
#include "drv_rf24l01.h"
#include "utility.h"
#include "ashining_g01_dp6.h"

const char *g_Ashining = "ashining";
uint8_t g_TxMode = 0, g_UartRxFlag = 0;
uint8_t g_UartRxBuffer[ 100 ] = { 0 };
uint8_t g_RF24L01RxBuffer[ 32 ] = { 1,2,3,4,5,6,7,8,9 }; 
pthread_t threadNrf24l01;


/**
  * @brief :线程的入口函数
  * @param :无
  * @note  :无
  * @retval:无
  */
void* thread_function(void* arg) {

	int ret;
	uint8_t i = 0;

    ret = SPI_Open();
	LV_LOG_USER("************************* ret = %d***********************\n", ret);


	//SPI_LookBackTest();

	NRF24L01_Gpio_Init();	
	//RF24L01初始化
	NRF24L01_check( );
	RF24L01_Init( );
	
#ifdef	RADIO_TX		
//=========================================================================================//	
//*****************************************************************************************//
//************************************* 发送 **********************************************//
//*****************************************************************************************//
//=========================================================================================//	
	
	//按键初始化
	drv_button_init( );
	
	RF24L01_Set_Mode( MODE_TX );		//发送模式
	
	while( 1 )	
	{
		//模式切换
		if( BUTOTN_PRESS_DOWN == drv_button_check( ))
		{
			g_TxMode = 1 - g_TxMode;		//模式会在 TX_MODE_1( 0 ),TX_MODE_2( 1 )之间切换
			
			//状态显示清零
			led_green_off( );
			led_red_off( );
			
			if( TX_MODE_1 == g_TxMode )
			{
				for( i = 0; i < 6; i++ )		
				{
					led_red_flashing( );	//固定发送模式，红灯闪烁3次
					delay1ms( 500 );		
				}
			}
			else
			{
				for( i = 0; i < 6; i++ )
				{
					led_green_flashing( );	//串口发送模式，绿灯闪烁3次
					delay1ms( 500 );
				}
			}
		}
		
		//发送
		if( TX_MODE_1 == g_TxMode )
		{
			NRF24L01_TxPacket( (uint8_t *)g_Ashining, 8 );		//模式1发送固定字符,1S一包
			delay1ms( 1000 );		
			led_red_flashing( );			
		}
		else
		{	
			//查询串口数据
			i = drv_uart_rx_bytes( g_UartRxBuffer );
			
			if( 0 != i )
			{
				NRF24L01_TxPacket( g_UartRxBuffer, i );
				led_red_flashing( );
			}
		}
	}
	
#else		
//=========================================================================================//	
//*****************************************************************************************//
//************************************* 接收 **********************************************//
//*****************************************************************************************//
//=========================================================================================//	

	LV_LOG_USER("set receive");

	RF24L01_Set_Mode( MODE_RX );		//接收模式	
	NRF24L01_RxPacket();		//接收字节

	
#endif
}


//创建Nrf24l01通信线程
void createNrf24l01Thread(void){
	int ret;

	LV_LOG_USER("enter");

	// 创建线程
    ret = pthread_create(&threadNrf24l01, NULL, &thread_function, NULL);
    if (ret != 0) {
        // 创建线程失败
        perror("pthread_create error:");
        return 1;
    }
}

